package com.xiaoq.sms;

import java.util.HashMap;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import com.cloopen.rest.sdk.CCPRestSDK;

@Component
public class SendSMSUtil {
	
	private static String URL = "app.cloopen.com";
	private static String PORT = "8883";
	private static String ACCOUNTSID = "8a48b55153eae5110153f53a057b11d1";
	private static String AUTHTOKEN = "bb921af988ef447e8b5a945771973e88";
	private static String APPID = "8a216da860bad76d0160c58dde280663";//小Q旅行
	
	private static CCPRestSDK restAPI = new CCPRestSDK(); //确定这个类是线程安全的

	/**
	 * 尊敬的{1},您预定的{2}{3}门票{4}张，
	 * 已预订成功.出游时间:{5}，订单号:{6}，
	 * 取票人手机号:{7}，入园凭证:门票电子票号，
	 * 使用方法:凭电子票号直接入园或换票入园请知晓
	 */
	public static final String SMS_TEMPLATEID_4_TICKET_ORDER = "270928";
	/**
	 * 【小Q旅行】尊敬的{1},您已成功预定{2}讲解员服务，出游时间:{3}，订单号{4}.祝您出游愉快
	 */
	public static final String SMS_TEMPLATEID_4_INTERPRETER_ORDER = "234711";

	/**
	 * 尊敬的{1},您预定的{2}{3}门票{4}张，
	 * 已预订成功.出游时间:{5}，订单号:{6}，
	 * 电子码:{7}，入园凭证:门票电子票号，
	 * 使用方法:凭电子票号直接入园或换票入园请知晓
	 */
	public static final String SMS_TEMPLATEID_4_DISTRIBUTION_ORDER = "270911";
	
	static {
		restAPI.init(URL, PORT);
		restAPI.setAccount(ACCOUNTSID, AUTHTOKEN);
		restAPI.setAppId(APPID);
	}

	/**
	 * @param teleNumber 电话号码
	 * @param templateId  智联云通讯 短信模板 Id
	 * @param datas  见【智联云通讯 短信模板 Id】对应的参数信息
	 * @return
	 */
	public  String sendSMS(String teleNumber,String templateId, String[] datas){
		StringBuilder resultStr = new StringBuilder("");
		HashMap<String, Object> result = restAPI.sendTemplateSMS(teleNumber,templateId,datas);
		if("000000".equals(result.get("statusCode"))){
			//正常返回输出data包体信息（map）
			HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");
			Set<String> keySet = data.keySet();
			resultStr.append("[");
			for(String key:keySet){
				Object object = data.get(key);//消息ID和创建时间
				resultStr = resultStr.append(object.toString()).append(",");
			}
			if(resultStr.length() > 1){
				resultStr = new StringBuilder(resultStr.substring(0, resultStr.length()-1)).append("]");
			}
		}else{
			//异常返回输出错误码和错误信息
			resultStr = resultStr.append("错误码=").append(result.get("statusCode")).append(" 错误信息= ").append(result.get("statusMsg"));
		}
		return resultStr.toString();
	}


	/**
	 * * 尊敬的{1},您预定的{2}{3}门票{4}张，已预订成功.出游时间:{5}，订单号:{6}，取票人手机号:{7}，入园凭证:门票二维码，使用方法:凭二维码直接入园或换票入园请知晓
	 * @param userName 取票人姓名
	 * @param shopName 景区名称
	 * @param ticketName 票的名称
	 * @param ticketNum 票的数量
	 * @param tourDate 出游日期 格式 "yyyy-MM-dd"
	 * @param orderNum 订单号
	 * @param teleNumber 取票人电话
	 * @return
	 */
	public String sendSMS4TicketOrder(String userName,
									   String shopName,
									   String ticketName,
									   String ticketNum,
									   String tourDate,
									   String orderNum,
									   String teleNumber){
		if(StringUtils.isAnyBlank(teleNumber, userName, shopName, ticketName, teleNumber, tourDate, orderNum, ticketNum)){
			return "取票人电话,取票人姓名,景区名称,票的名称,票的数量,出游日期,订单号，电话. 中有为空的";
		}

		String[] params = {userName, shopName, ticketName, ticketNum, tourDate, orderNum, teleNumber};

		return sendSMS(teleNumber, SMS_TEMPLATEID_4_TICKET_ORDER, params);
	}

	/**
	 * * 尊敬的{1},您预定的{2}{3}门票{4}张，已预订成功.出游时间:{5}，订单号:{6}，取票人手机号:{7}，入园凭证:门票二维码，使用方法:凭二维码直接入园或换票入园请知晓
	 * @param userName 取票人姓名
	 * @param shopName 景区名称
	 * @param ticketName 票的名称
	 * @param ticketNum 票的数量
	 * @param tourDate 出游日期 格式 "yyyy-MM-dd"
	 * @param orderNum 订单号
	 * @param teleNumber 取票人电话
	 * @param ticketCode 电子票号，多个以","分割
	 * @return
	 */
	public String sendSMS4DistributionOrder(String userName,
									  String shopName,
									  String ticketName,
									  String ticketNum,
									  String tourDate,
									  String orderNum,
									  String teleNumber,
									  String ticketCode){
		if(StringUtils.isAnyBlank(teleNumber, ticketCode, userName, shopName, ticketName, ticketCode, tourDate, orderNum, ticketNum)){
			return "取票人电话,取票人姓名,景区名称,票的名称,票的数量,出游日期,订单号，电话. 中有为空的";
		}

		String[] params = {userName, shopName, ticketName, ticketNum, tourDate, orderNum, ticketCode};

		return sendSMS(teleNumber, SMS_TEMPLATEID_4_DISTRIBUTION_ORDER, params);
	}


	/**
	 *  下单，预约讲解员， 给下单者 发短信
	 * @param userName 预约者姓名
	 * @param shopName 景区名称
	 * @param tourDate 出游日期 格式 "yyyy-MM-dd"
	 * @param orderNum 订单号
	 * @param teleNumber 电话号码
	 * @return
	 */
	public String sendSMS4InterpreterOrder(String userName,
									  String shopName,
									  String tourDate,
									  String orderNum,
									  String teleNumber){
		if(StringUtils.isAnyBlank(teleNumber, userName, shopName, teleNumber, tourDate, orderNum)){
			return "预约者姓名,景区名称,出游日期,订单号，电话. 中有为空的";
		}

		String[] params = {userName, shopName, tourDate, orderNum};
		return sendSMS(teleNumber, SMS_TEMPLATEID_4_INTERPRETER_ORDER, params);
	}


}
